<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>Vue Element SortableJS 拖拽排序 DEMO</title>
    <link rel="stylesheet" href="https://cdn.staticfile.org/element-ui/2.15.14/theme-chalk/index.css">
</head>
<body>
<div id="app">
    <el-table :data="tableData" border row-key="id">
        <el-table-column
                prop="date"
                label="日期"
                width="180">
        </el-table-column>
        <el-table-column
                prop="name"
                label="姓名"
                width="180">
        </el-table-column>
        <el-table-column
                prop="address"
                label="地址">
        </el-table-column>
        <el-table-column
                prop="sort"
                label="序号">
        </el-table-column>
    </el-table>
    <div>
        数据实时参考：
        <pre><code>{{tableData}}</code></pre>
    </div>

</div>
<script src="https://cdn.staticfile.org/vue/2.7.9/vue.js"></script>
<script src="https://cdn.staticfile.org/element-ui/2.15.14/index.js"></script>
<!-- 拖拽排序组件 -->
<script src="https://cdn.staticfile.org/Sortable/1.15.1/Sortable.js"></script>
<script>
    /**
     * 参考
     * https://www.cnblogs.com/xiaozhaoboke/p/16377566.html
     * https://element.eleme.cn/#/zh-CN/component/table
     */
    const vm = new Vue({
        el: '#app',
        data: () => ({
            /**
             * element项目 和王小虎杠上了 ￣^￣゜汗
             * 我这里sort的特地都给0
             * 证明原本的sort准不准都不影响程序
             */
            tableData: [
                {
                    id: '1',
                    date: '2016-05-02',
                    name: '王小虎1',
                    address: '上海市普陀区金沙江路 100 弄',
                    sort: 0
                },
                {
                    id: '2',
                    date: '2016-05-04',
                    name: '王小虎2',
                    address: '上海市普陀区金沙江路 200 弄',
                    sort: 0
                },
                {
                    id: '3',
                    date: '2016-05-01',
                    name: '王小虎3',
                    address: '上海市普陀区金沙江路 300 弄',
                    sort: 0
                },
                {
                    id: '4',
                    date: '2016-05-03',
                    name: '王小虎4',
                    address: '上海市普陀区金沙江路 400 弄',
                    sort: 0
                }
            ]
        }),
        methods: {
            // 初始化 行拖拽
            rowDrop() {
                const tbody = document.querySelector('.el-table__body-wrapper tbody')
                const _this = this
                Sortable.create(tbody, {
                    /**
                     * 拖拽鼠标释放事件 可以获得新旧序号
                     */
                    onEnd({newIndex, oldIndex}) {
                        // 根据序号调换顺序方法
                        _this.tableData.splice(newIndex, 0, _this.tableData.splice(oldIndex, 1)[0])
                        // 重新排序赋值sort
                        _this.initSort()
                    }
                })
            },
            initSort() {
                // sort 等于序号
                this.tableData.forEach((item, index) => {
                    item.sort = index
                });
            }
        },
        mounted() {
            this.initSort();
            this.rowDrop();
        },
    })
</script>
</body>
</html>